home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- *
- * NSSDC/CDF Encode CDF things.
- *
- * Version 1.0, 25-Feb-92, Hughes STX
- *
- * Modification history:
- *
- * V1.0 25-Feb-92, J Love Original version.
- *
- ******************************************************************************/
-
- #include "cdfdist.h"
-
- /******************************************************************************
- * EncodeValue. Returns width of encoded value.
- ******************************************************************************/
-
- int EncodeValue (dataType, value, Evalue)
- long dataType; /* CDF data type. */
- void *value; /* Value to encode. */
- char *Evalue; /* Encoded value. */
- {
- switch (dataType) {
- case CDF_BYTE:
- case CDF_INT1:
- sprintf (Evalue, "%d", *((Schar *) value));
- return strlen(Evalue);
-
- case CDF_INT2:
- sprintf (Evalue, "%d", *((short *) value));
- return strlen(Evalue);
-
- case CDF_INT4:
- sprintf (Evalue, "%ld", *((long *) value));
- return strlen(Evalue);
-
- case CDF_UINT1:
- sprintf (Evalue, "%u", *((Uchar *) value));
- return strlen(Evalue);
-
- case CDF_UINT2:
- sprintf (Evalue, "%u", *((unsigned short *) value));
- return strlen(Evalue);
-
- case CDF_UINT4:
- sprintf (Evalue, "%lu", *((unsigned long *) value));
- return strlen(Evalue);
-
- case CDF_REAL4:
- case CDF_FLOAT: {
- int n;
- size_t len;
- char *ePtr;
- char temp[80+1];
-
- sprintf (Evalue, "%g", *((float *) value));
- n = strlen(Evalue);
-
- if ((ePtr = strchr(Evalue,'e')) == NULL) {
- if (strchr(Evalue,'.') == NULL) { /* eg., 0 ---> 0.0 */
- strcat (Evalue,".0");
- n += 2;
- }
- }
- else {
- if (strchr(Evalue,'.') == NULL) { /* eg., 1e+04 ---> 1.0e+04 */
- len = ePtr - Evalue;
- strncpy (temp, Evalue, len);
- temp[len] = NUL;
- strcat (temp, ".0");
- strcat (temp, ePtr);
- strcpy (Evalue, temp);
- n += 2;
- }
- }
-
- return n;
- }
-
- case CDF_REAL8:
- case CDF_DOUBLE: {
- int n;
- size_t len;
- char *ePtr;
- char temp[80+1];
-
- sprintf (Evalue, "%g", *((double *) value));
- n = strlen(Evalue);
-
- if ((ePtr = strchr(Evalue,'e')) == NULL) {
- if (strchr(Evalue,'.') == NULL) {
- strcat (Evalue,".0");
- n += 2;
- }
- }
- else {
- if (strchr(Evalue,'.') == NULL) {
- len = Evalue - ePtr;
- strncpy (temp, Evalue, len);
- temp[len] = NUL;
- strcat (temp, ".0");
- strcat (temp, ePtr);
- strcpy (Evalue, temp);
- n += 2;
- }
- }
-
- return n;
- }
-
- case CDF_CHAR:
- sprintf (Evalue, "%c", *((Schar *) value));
- return strlen(Evalue);
-
- case CDF_UCHAR:
- sprintf (Evalue, "%c", *((Uchar *) value));
- return strlen(Evalue);
-
- case CDF_EPOCH: {
- struct EPOCH ep;
- ep.tSince0 = *((double *) value);
- strcpy (Evalue, epochString(&ep));
- return strlen(Evalue);
- }
- }
- return 0;
- }
-
- /******************************************************************************
- * EncodeString. Returns width of encoded string (include delimeters).
- ******************************************************************************/
-
- int EncodeString (numChars, string, Estring)
- long numChars; /* Number of characters (elements). */
- char *string; /* String to encode. */
- char *Estring; /* Encoded string. */
- {
- char delim;
- int i;
-
- delim = PickDelim (string);
-
- Estring[0] = delim;
-
- for (i = 0; i < numChars; i++) {
- Estring[i+1] = (isprint(string[i]) ? string[i] : '.');
- }
-
- Estring[i+1] = delim;
- Estring[i+2] = NUL;
-
- return strlen(Estring);
- }
-